package com.xbongbong.paas.domain.dao;

import com.xbongbong.paas.domain.entity.PaasStageEntity;
import com.xbongbong.paas.domain.entity.ext.PaasProcessTemplateNodeEntityExt;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * 阶段
 * @author 李少杰
 * @version v1.0.0
 * @date 2021/11/17 14:59
 */
@Repository
@Mapper
public interface PaasStageDao {

    /**
     * 条件查找
     * @param param
     * @return
     */
    List<PaasStageEntity> findEntitys(@Param("param") Map<String,Object> param);

    /**
     * 更新阶段启用状态
     * @param corpid
     * @param id
     * @param enable
     */
    void updateEnable(@Param("corpid") String corpid, @Param("id") Integer id, @Param("enable") Integer enable);

    /**
     * 查找实体
     * @param key
     * @param corpid
     * @return
     */
    PaasStageEntity getByKey(@Param("key") Long key, @Param("corpid") String corpid);

    /**
     * 通过formId + code获取到一个阶段实体
     * 同一个form下code肯定唯一，但是多个form之间可能不唯一（新初始化的form都用的默认阶段code - 1、2、3、4...）
     * @param corpid 公司id
     * @param formId 模板id
     * @param code 阶段code
     * @return com.xbongbong.saas.domain.entity.PaasStageEntity
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    PaasStageEntity getByCode(@Param("corpid") String corpid, @Param("formId") Long formId, @Param("code") String code);

    Integer insert(PaasStageEntity entity);

    Integer update(PaasStageEntity entity);

    void insertBatch(List<PaasStageEntity> list);

    void sort(@Param("corpid") String corpid, @Param("formId") Long formId, @Param("sortMap") Map<Long,Integer> sortMap);

    List<PaasStageEntity> getListByFormId(@Param("formId") Long formId, @Param("corpid") String corpid);

    Integer getEntitysCount(@Param("param") Map<String,Object> param);

    PaasStageEntity getFirstStage(@Param("corpid") String corpid, @Param("formId") Long formId);

    PaasStageEntity getNextStage(@Param("corpid") String corpid, @Param("formId") Long formId, @Param("sort") Integer sort);

    List<Integer> getIntervalCodeList(@Param("startSort")Integer startSort, @Param("endSort")Integer endSort, @Param("corpid") String corpid, @Param("formId") Long formId);

    /**
     * 批量更新
     * @param paasStageEntityList
     * @param corpid
     */
    void updateBatch(@Param("list") List<PaasStageEntity> paasStageEntityList, @Param("corpid") String corpid);

    void updateBatchDefaultAndLinkOption(@Param("list") List<PaasStageEntity> paasStageEntityList, @Param("corpid") String corpid);


    void updateBatch4MirrorRollback(@Param("list") List<PaasStageEntity> paasStageEntityList, @Param("corpid") String corpid);

    /**
     * 更新阶段名
     * @param id
     * @param name
     */
    void updateName(@Param("id") Long id, @Param("name") String name);

    /**
     * 删除
     * @param key
     * @param corpid
     * @return
     */
    Integer deleteByKey(@Param("key") Long key, @Param("corpid") String corpid);

    /**
     * 批量删除
     * @param paasStageEntityList
     * @param corpid
     * @return
     */
    Integer deleteBatch(@Param("list") List<PaasStageEntity> paasStageEntityList, @Param("corpid") String corpid);

}
